﻿using Model.Entities;
using Model.NHExtras;
using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Model.Gateways
{
    public class HorariosGateway
    {
        public IList<Horarios> fetchByFilter(Estacoes estacao_origem, Estacoes estacao_destino, int dia_da_semana)
        {
            IList<Horarios> horarios = new List<Horarios>();
            using (IStatelessSession session = NHibernateHelper.GetCurrentStatelessSession())
            {
                session.BeginTransaction();

                horarios = session.CreateQuery("FROM Horarios WHERE EstacaoOrigem = :origem AND EstacaoDestino = :destino AND dia_semana = :dia_semana ORDER BY Hora")
                                    .SetParameter("origem", estacao_origem)
                                    .SetParameter("destino", estacao_destino)
                                    .SetParameter("dia_semana", dia_da_semana)
                                    .List<Horarios>();
            }

            return horarios;
        }

        public IList<object[]> fetchObjByFilter(Estacoes estacao_origem, Estacoes estacao_destino, int dia_da_semana)
        {
            IList<object[]> horarios = new List<object[]>();
            using (ISession session = NHibernateHelper.GetCurrentSession())
            {
                session.BeginTransaction();

                IList<Horarios> h = session.CreateQuery("FROM Horarios WHERE EstacaoOrigem = :origem AND EstacaoDestino = :destino AND dia_semana = :dia_semana ORDER BY Hora")
                                    .SetParameter("origem", estacao_origem)
                                    .SetParameter("destino", estacao_destino)
                                    .SetParameter("dia_semana", dia_da_semana)
                                    .List<Horarios>();
                
                foreach (Horarios item in h)
                {
                    object[] os = new object[]{
                        item.Id,
                        item.EstacaoOrigem.Cidade.Nome,
                        item.EstacaoOrigem,
                        item.EstacaoDestino.Cidade.Nome,
                        item.EstacaoDestino,
                        item.Hora.TimeOfDay,
                        item.DiaSemana,
                        item.Terminal
                    };

                    horarios.Add(os);
                }
            }

            return horarios;
        }
    }
}
